#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdlib.h>

int main()
{
  printf("create child process\n");
  sleep(2);
  pid_t id=fork();
  if(id==0)
  {
    int cnt=5;
    while(cnt)
    {
    printf("I am child process,pid:%d,ppid:%d,cnt:%d\n",getpid(),getppid(),cnt);
    cnt--;
    }
    exit(15);
  }

  int status=0;
  while(1)
  {
    pid_t rid=waitpid(id,&status,WNOHANG);
    if(rid>0)
    {
      if(WIFEXITED(status))
      {
        printf("wait success! rid:%d status:%d exit_code:%d\n",rid,status,WEXITSTATUS(status));
        break;
      }
      else
      {
        printf("child process abnormal!\n");
      }
    }
    else if(rid==0)
    {
      sleep(1);
      printf("father process say:child process is running\n");
    }
    else
    {
       perror("waitpid failed");
       break;
    }
  }
  return 0;
}
//int main()
//{
//  printf("create child process\n");
//  sleep(2);
//  pid_t id=fork();
//  if(id==0)
//  {
//    int cnt=5;
//    while(cnt)
//    {
//    printf("I am child process,pid:%d,ppid:%d,cnt:%d\n",getpid(),getppid(),cnt);
//    cnt--;
//    }
//    exit(20);
//  }
//
//  int status=0;
//  pid_t rid=waitpid(id,&status,0);
//  if(rid>0)
//  {
//    if(WIFEXITED(status))
//    {
//      printf("wait success! rid:%d status:%d exit_code:%d\n",rid,status,WEXITSTATUS(status));
//    }
//    else
//    {
//      printf("child process abnormal!\n");
//    }
//  }
//  return 0;
//}
//
//int main()
//{
//  printf("create child process\n");
//  sleep(2);
//  pid_t id=fork();
//  if(id==0)
//  {
//    int cnt=5;
//    while(cnt)
//    {
//    printf("I am child process,pid:%d,ppid:%d,cnt:%d\n",getpid(),getppid(),cnt);
//    cnt--;
//    }
//    exit(1);
//  }
//
//  int status=0;
//  pid_t rid=waitpid(id,&status,0);
//  if(rid>0)
//  {
//    //printf("wait success! rid:%d,status:%d\n",rid,status);
//    printf("wait success! rid:%d,status:%d exit_signal:%d, exit_code:%d\n",rid,status,status&0x7F,(status>>8)&0xFF);
//  }
//
//  return 0;
//}
